class: title-slide # ER018 - Analyzing Business Relations & Documents ## PVA1 ### Intro R/RStudio und Arbeiten mit R-Projekten <br> <br> <br> <br> <br> <br> <br> ### FS 2024 <br> ### Prof. Dr. Jörg Schoder .mycontacts[
@FFHS-EconomicResearch
@jfschoder ] --- layout: true <div class="my-footer"></div> <div style="position: absolute;left:400px;bottom:10px;font-size:9px">
Prof. Dr. Jörg Schoder</div> --- name: agenda class: left .blockquote[Agenda] ## Einführung R und RStudio * Motivation und Einordnung *
Basics * RMarkdown/Quarto * Datenprojekte in
--- class: left .blockquote[Motivation und Einordnung] ## Daten: vom Kostenfaktor zum Asset .panelset[ .panel[.panel-name[Perspektiven] <img src="data:image/png;base64,#../../img/PVA1/data_in_business_(tableau)_1.PNG" width="100%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Bewertung] <img src="data:image/png;base64,#../../img/PVA1/data_in_business_(tableau)_2.PNG" width="80%" style="display: block; margin: auto;" /> ] ] .quelle[Quelle: [cloudflight.io](https://www.cloudflight.io/de/download/uncategorized-download/turn-data-into-products-vom-data-scientist-zum-data-business-owner/)] ??? * Data is Oil * Quatsch, weil Daten mehr werden, Öl aber verbraucht wird. * Aber: Wie beim Öl entsteht der Wert auch bei Daten erst durch die Weiterverarbeitung ("Raffinerie") --- class: left .blockquote[Motivation und Einordnung] ## Warum Programmierung? .panelset[ .panel[.panel-name[Kompetenz] .fig.upper-right[ <img src="data:image/png;base64,#../../img/PVA1/Programming_Thinking_(SteveJobs).PNG" width="50%" /> ] .fig.lower-left[ <img src="data:image/png;base64,#../../img/PVA1/Programming_Quote_(Hawking).PNG" width="50%" /> ] .quellePanURL2[Bildquellen: [ilovecoding.org](https://twitter.com/ilovecodingorg/status/844202136980389888), [imrananees.blogspot.com](https://imrananees.blogspot.com/2019/10/basic-computer-programming-essential.html).] ] .panel[.panel-name[Benchmark] Beispiel: Harvard Business School * **Wahlmodule „Data Science for Managers“ (DSM)** .small[ * DSM1: „Although few HBS MBA students will be actively engaged in coding post-graduation, the course faculty believe that having **some exposure to basic, hands-on coding and techniques** will allow our students to **more effectively manage and interact with data scientists**. DSM1 will not delve deeply into technical details, but will require students to engage with some code.“ (Hervorhebung nicht im Original) * DSM2: „[..] allows students to build a deeper understanding of **how data and analytics can complement judgment for managerial decision making**. The course builds on concepts learned in DSM1 and is specifically suited for students who want to continue their career at companies such as technology companies, where data collection, aggregation, and analysis permeates the entire organization.“ (Hervorhebung nicht im Original) ] ] ] --- class: left .blockquote[Motivation und Einordnung] ## Warum R? <img src="data:image/png;base64,#../../img/PVA1/whyR.svg" width="100%" style="display: block; margin: auto;" /> .quelle[Eigene Darstellung.] ??? * März 2024: Platz 6 im [PYPL Popularity Ranking](https://pypl.github.io/PYPL.html) * Programmiersprachen. Am beliebtesten Python. Aber für statistische Anwendungen hat R, gerade im akademischen Bereich noch die Nase vorn. * Am Ende auch egal. Es konvergiert, bspw. in RMarkdown/Quarto kann nicht nur R-Code sondern auch Python und die aufstrebende Sprache Julia eingebettet werden. * somit sollte R als Einstieg gesehen werden. Je nach Anwendungsgebiet können die Sprachen dann auch kombiniert werden. --- class: inverse, center, middle ##
Basics --- class: left .blockquote[
Basics] ##
-chitektur .pull-left[ <img src="data:image/png;base64,#../../img/PVA1/R-chitektur_(Field_2012_S63).PNG" width="100%" style="display: block; margin: auto;" /> ] .pull-right[ * Base
* der "Motor" bzw. das "Betriebssystem" * lokale Installation via CRAN (Comprehensive R Archive Network) oder diverse Mirrors * Bibliotheken (auch als Pakete bezeichnet) * die "Apps" * Erweiterung der Funktionalität ] .quelle[Bildquelle: <a name=cite-field_discovering_2012></a>[Field, Miles, and Field (2012)](#bib-field_discovering_2012), S. 63.] --- class: left .blockquote[
Basics] ##
als objektorientierte Programmiersprache * Alles ist ein Objekt * Daten (Vektoren, Matrizen, etc.) * Funktionen * Diagramme (bspw. ggplot) -- * Objekte können unterschiedlichen Objekt-Klassen zugeordnet werden * bspw. `character`, `numeric`, `factor`, `tibble`, etc. * Zu welcher Klasse ein Objekt gehört kann mit dem Befehl `class()` abgefragt werden. -- * Objekte haben eine Länge * bspw. Zahl der Elemente in einem Vektor * Die Objektlänge kann mit dem Befehl length() abgefragt werden. * Jedes Objekt wird intern durch einen Vektor repräsentiert.
ist eine Vektor-basierte Programmiersprache --- class: left .blockquote[
Basics] ## Einstieg in
* Kursmaterialien ER018 -- * **swirl**-Paket als interaktives
-Tutorial. * `install.packages(’Paketname’,dep=TRUE)` * `library(Paketname)` -- * [RStudio Education](https://education.rstudio.com/learn/beginner/) -- * Diverse Tutorials bei [datacamp.com](https://www.datacamp.com/tutorial/category/r-programming) -- * Wickham et al. (2023): [R for Data Science (2. Aufl.)](https://r4ds.hadley.nz/) ??? * FFHS Moodle-Kurs (zu erstellen) --- class: inverse, center, middle ## RStudio und RMarkdown/Quarto --- class: left .blockquote[RStudio und RMarkdown/Quarto] ## RStudio als "Benutzeroberfläche" .panelset[ .panel[.panel-name[R vs. RStudio] .small[ * Die Benutzeroberfläche von
ist auf das notwendigste beschränkt: * beim Öffnen erscheint nur die sog. **
-Console**. Dort können Befehle eingegeben werden, deren Ergebnis dann unmittelbar angezeigt wird. * Statt der Eingabe in der
-Console können Eingaben auch
-Skript-Dateien (.R) erfolgen. In Base-
ist nur ein sehr rudimentärer "Texteditor" zur Bearbeitung von .R-Dateien integriert. * RStudio ist eine sog. integrierte Entwicklungsumgebung (IDE)... * ...die als kostenlose Desktop-Version verfügbar ist. * ...als Cloud-Version ([posit Cloud](https://posit.cloud/)) mit gewissen Einschränkungen ebenfalls kostenfrei verfügbar ist. * ...und ermöglicht eine anwendungsfreundliche(re) Nutzung von
(z.B. durch GUI, Kontextmenü, autocompletion etc.) * Datenprojekte können komplett in RStudio bearbeitet werden (
läuft nur im Hintergrund, muss aber nicht extra geöffnet werden). ] ] .panel[.panel-name[Quick Tour] .small[ * RStudio hat mehrere Fenster mit zusätzlichen Reitern: Skript (zur Dokumentation), Konsole (zur direkten Befehleingabe), Environment (Daten), Pakete, Plots etc. ] <p align="center"><iframe width="650" height="350" src="https://www.youtube.com/embed/SdMPh5uphO0?si=0RqBc7jmHesShdsF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe></p> ] ] --- class: left .blockquote[RStudio und RMarkdown/Quarto] ## Warum RMarkdown/Quarto? .panelset[ .panel[.panel-name[Zweck] * Möglichkeit zur Integration von
-Programmcode (statistische Analysen) und Text (verbale Beschreibungen/Erläuterungen) in einer Datei * Reproduzierbarkeit von Forschung/Analysen durch Dokumentation * Leichterer Austausch von Analyseergebnissen (inkl. Dokumentation) * Zahlreiche gängige Ausgabeformate (.docx, .pptx, .pdf, .html) * Produktivitätssteigerung bei wiederkehrenden Berichten/Updates (Automatisierung) ] .panel[.panel-name[Rmd vs. qmd] <iframe src="https://quarto.org/docs/faq/rmarkdown.html" width="100%" height="400px" data-external="1"></iframe> ] .panel[.panel-name[Praxisbeispiel Airbnb] .blockquote[ "At Airbnb, all R analyses are documented in rmarkdown, where code and visualizations are combined within a single written report. Posts are carefully reviewed by experts in the content area and techniques used, both in terms of methodologies and code style, before publishing and sharing with the business partners." .tr[ <a name=cite-bion_how_2017></a>[Bion, Chang, and Goodman (2017)](https://doi.org/10.7287/peerj.preprints.3182v1), S. 7. ] ] <img src="data:image/png;base64,#../../img/PVA1/Rbnb.PNG" width="50%" style="display: block; margin: auto;" /> ] ] --- class: inverse, center, middle ## Datenprojekte in
.blockquote[tidyverse] .blockquote[R-Projekte] --- class: left .blockquote[tidyverse] ## Phasen und Ablauf von Datenprojekten <img src="data:image/png;base64,#../../img/PVA1/DataScience_Workflow.PNG" width="2396" /> .quelle[Eigene Darstellung.] --- class: left .blockquote[tidyverse] ## Datenprojekte im
-tidyverse .panelset[ .panel[.panel-name[Workflow] <img src="data:image/png;base64,#../../img/PVA1/tidyverse_(storybench).png" width="2205" /> .quellePanURL[Bildquelle: [storybench.org](https://www.storybench.org/getting-started-with-tidyverse-in-r/).] ] .panel[.panel-name[tidyverse] * [tidyverse](https://www.tidyverse.org/) als Sammlung von
-Paketen mit einer "gemeinsamen und v.a. **intuitiven** Grundlogik" (Syntax) * Vorstellung:
als Sprache, *tidyverse* als Dialekt. * **Kernphilosophie:** Effizientiere, konsistentere und **intuitivere** Gestaltung von Datenanalysen durch... * ...Organisation von Daten in **"tidy"**-Form * ...klarere und kompaktere **Code-Struktur** ] ] ??? * **tidyverse**-Bibliothek als "Metapaket": Mit `library(tidyverse)` werden automatisch die wichtigsten tidyverse-Pakete geladen: * Das **tibble**-Paket - stellt via `tibble()`-Funktion eine Datenstruktur bereit * Das **readr**-Paket - stellt diverse Funktionen wie bspw. `read_csv()` zum Einlesen rechteckiger Daten aus durch Trennzeichen getrennten Dateien (.csv,.tsv, etc.) zur Verfügung. * Das **tidyr**- und das **dplyr**-Paket zur Datentransformation und -modifikation * Das **stringr**-, das **forcats**- und das **lubridate**-Paket für die Arbeit mit speziellen Objekttypen: * **stringr** für die Arbeit mit Textobjekten * **forcats** für die Arbeit mit Faktoren * **lubridate** für die Arbeit mit Zeitdaten * das **purrr**-Pakete für funktionelles Programmieren * das **ggplot**-Paket für die Datenvisualierung Neben dem **purrr**-Paket spielt für die Praxis in Sachen Programmierung noch das **glue**-Paket eine Rolle, das (als Alternative zur paste()-Funktion) die Möglichkeit bietet Daten/Zahlen und strings zu verbinden. --- class: left .blockquote[tidyverse] ## Kernelemente des tidyverse .panelset[ .panel[.panel-name[tidy Daten] <img src="data:image/png;base64,#../../img/PVA1/tidy-data_(Wickham).png" width="70%" style="display: block; margin: auto;" /> .quellePanURL[Bildquelle: [Wickham et al. (2023)](wickham_r_2023).] ] .panel[.panel-name[Verben] Anwendungsspezifische Funktionen (sog. "Verben"): .small[ 1. Zeilen: * `filter()` * `slice()` * `arrange()` 2. Spalten: * `select()` * `rename()` * `mutate()` 3. Gruppen von Zeilen: * `summarise()` * `group_by()` ] Ausführlicher im Skript [Datenprojekte in R](https://ffhs-economicresearch.github.io/ER018/Rmd/PVA1/04_DatenprojekteR.html#1) ] .panel[.panel-name[Pipes] * Pipes erhöhen die Lesbarkeit des Codes: <!-- --> .quellePanURL[Bildquelle: [Dodona](https://dodona.be/en/activities/2127610019/)]
Output einer Funktion als Input für die nächste Funktion * **magrittr**-Pipe (`%>%`) vs. native Pipe **native Pipe** (`|>`, ab R 4.1.0) * Konvention für ER014: magrittr-Pipe (Shortcut Strg/Cmd + Shift + M) ] ] ??? * Die “tidy”-Form von Daten ist dadurch gekennzeichnet, dass * jede Variable eine Spalte darstellt, * jeder Fall eine Zeile und * jeder Wert einer Beobachtung entspricht. * ...Einsatz funktionaler Programmierung und anwendungsspezifischer Funktionen (sog. "Verben" wie `filter()`, `mutate()`, `select()` usw.) anstelle komplexer Schleifen. * Spezielle Funktionen zur Erzeugung und Transformation von "tidy"-Daten stellt die **tidyr**-Bibliothek bereit. * Besonders häufig werden wir die Funktionen `pivot_wider()` und `pivot_longer()` einsetzen, um Daten zwischen dem wide-Format und dem long-Format (bspw. von Tabelle 2 zu 3 bzw. von Tabelle 3 zu 2) zu transformieren. * Wenn messy-Daten in der Form vorliegen, dass mehrere Werte in einer Spalte gespeichert wurden (so wie in der Urliste von Hagen), erweist sich die `separate()`-Funktion als hilfreich. * ...Pipes (`%>%`), um den Output einer Funktion direkt als Input für die nächste Funktion zu verwenden. **Kurz:** Klare und intuitive Syntax mit intuitiven Funktionsnamen ("Verben") * In Base-
wurde mit Version 4.1.0 eine **native Pipe** (`|>`) implementiert --- class: left .blockquote[tidyverse] ## Beispiel: Lesbarkeit durch Pipes .small[ * **Aufgabe:** Berechne den Logarithmus des Vektors `x=(0.109, 0.359, 0.63, 0.996, 0.515, 0.142, 0.017, 0.829, 0.907)`, setze dessen erste Differenzen in die Exponentialfunktion ein und runde das Ergebnis (eine Nachkommastelle). * Schwer lesbarer (verschachtelter) Code in Base-
```r round(exp(diff(log(x))), 1) ``` ``` ## [1] 3.3 1.8 1.6 0.5 0.3 0.1 48.8 1.1 ``` * Intuitive Erfassung von workflows mittels magrittr-Pipe (wird mit tidyverse-Paket geladen) ```r x %>% log() %>% diff() %>% exp() %>% round(1) ``` ``` ## [1] 3.3 1.8 1.6 0.5 0.3 0.1 48.8 1.1 ``` ] ] --- class: left .blockquote[R-Projekte] ## Reproduzierbarkeit mit R-Projekten * Projektordner mit einheitlicher Struktur: Ordner für * Daten * R-Skripte * Rmd/qmd * Abbildungen * ... -- * Vorlage im FFHS-Moodle-Kurs:
[R-Projektvorlage.zip](https://moodle.ffhs.ch/pluginfile.php/5003190/mod_folder/content/0/R-Projektvorlage.zip?forcedownload=1) -- * Dokumentation mit README.md auf jeder Ordnerebene -- * Ein Projekt ist erst angelegt, wenn die .Rproj-Datei im Wurzelverzeichnis erzeugt wurde. -- * "Navigation" mittels `xfun::from_root()` ??? UPDATE bzw. Anpassen für unterschiedliche Kurse --- class: left .blockquote[R-Projekte] ## Anlegen und dokumentieren von R-Projekten <iframe width="900" height="420" src="https://www.youtube.com/embed/UvqtxY9Lgvk?si=xoiTIvh5DDKcCgg8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> --- class: left .blockquote[R-Projekte] ## Einführung in Quarto und Importieren von Daten <iframe width="900" height="420" src="https://www.youtube.com/embed/S6oCvjEoLFs?si=bbB590PCszdAOONF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> --- class: inverse,center,middle # Wir brauchen eine Pause. --- background-image: url("data:image/png;base64,#http://bit.ly/cs631-donkey") background-size: cover --- class: left ## Quellenverzeichnis .ref-slide[ <a name=bib-bion_how_2017></a>[Bion, R., R. Chang, and J. Goodman](#cite-bion_how_2017) (2017). _How R Helps Airbnb Make the Most of Its Data_. Preprint. PeerJ Preprints. DOI: [10.7287/peerj.preprints.3182v1](https://doi.org/10.7287%2Fpeerj.preprints.3182v1). (Visited on Mrz. 01, 2024). <a name=bib-field_discovering_2012></a>[Field, A., J. Miles, and Z. Field](#cite-field_discovering_2012) (2012). _Discovering Statistics Using R_. Los Angeles London New Delhi Singapore Washington, DC: Sage. ISBN: 978-1-4462-8913-6 978-1-4462-0045-2 978-1-4462-0046-9. <a name=bib-wickham_r_2023></a>[Wickham, H., M. Çetinkaya-Rundel, and G. Grolemund](#cite-wickham_r_2023) (2023). _R for Data Science: Import, Tidy, Transform, Visualize, and Model Data_. 2nd Edition. Beijing Boston Farnham Sebastopol Tokyo: O'Reilly. ISBN: 978-1-4920-9740-2. ]